package com.javiplay.flujoscaja.client.forms;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.javiplay.flujoscaja.client.data.DataAsesoria;
import com.javiplay.flujoscaja.client.data.DataCliente;
import com.javiplay.flujoscaja.client.links.LinkCliente;
import com.javiplay.flujoscaja.client.servicios.ServicioAsync;

public class FormIntroCliente extends Composite {

	final ServicioAsync service;

	List listeners = null;

	public DataCliente cliente = new DataCliente();
	public DataAsesoria asesoria = new DataAsesoria();

	
	public Label lrelacionado = new Label("Relacionado con:");
	public Label lNombreAsesoria = new Label("");

	public Label lCif = new Label("NIF/CIF:");

	public TextBox tbCif = new TextBox();

	public Label lNombre = new Label("Nombre:");

	public TextBox tbNombre = new TextBox();

	public HorizontalPanel panel = new HorizontalPanel();

	public Button btnGuardar = new Button("Guardar", new ClickListener() {

		public void onClick(Widget sender) {

			if (cliente.getId() == null || cliente.getId().intValue() == -1) {
				
				cliente.setCif(tbCif.getText());
				cliente.setNombre(tbNombre.getText());
				
				service.guardarCliente(cliente,
						new AsyncCallback() {

							public void onFailure(Throwable caught) {

							}

							public void onSuccess(Object result) {
								
								cliente = (DataCliente) result;

								if (listeners != null) {
									Iterator i = listeners.iterator();
									while (i.hasNext()) {
										LinkCliente a = (LinkCliente) i.next();
										a.onClienteClick(cliente);
									}
								}
								 
								btnGuardar.setText("Modificar");

							}
						});
			} else { // Hay id y debemos modificar pues es seleccionado

				cliente.setCif(tbCif.getText());
				
				cliente.setNombre(tbNombre.getText());

				service.modificarCliente(cliente, new AsyncCallback() {

					public void onFailure(Throwable caught) {

					}

					public void onSuccess(Object result) {

						System.out.println("Modificamos cliente");

						if (listeners != null) {
							Iterator i = listeners.iterator();
							while (i.hasNext()) {
								LinkCliente a = (LinkCliente) i.next();
								a.onClienteClick(cliente);
							}
						}
						

					}
				});

			}

		}
	});

	
	public Button btnCerrar = new Button("Cancelar", new ClickListener() {
		public void onClick(Widget sender) {
			panel.clear();
		}});

	public FormIntroCliente(ServicioAsync service) {

		this.service = service;

		panel.add(lCif);
		panel.add(tbCif);
		panel.add(lNombre);
		panel.add(tbNombre);
		panel.add(lrelacionado);
		panel.add(lNombreAsesoria);
		
		panel.add(btnGuardar);
		panel.add(btnCerrar);

		initWidget(panel);
	}

	public DataCliente getCliente() {
		return cliente;
	}

	public void setCliente(DataCliente cli) {
		this.cliente = cli;
	}

	public void refresh() {

		tbCif.setText(cliente.getCif());
		tbNombre.setText(cliente.getNombre());
		lNombreAsesoria.setText(asesoria.getNombre());
	}

	public void addClienteListener(Widget sender) {
		if (listeners == null) {
			listeners = new ArrayList();
			listeners.add(sender);
		} else
			listeners.add(sender);
	}

	public DataAsesoria getAsesoria() {
		return asesoria;
	}

	public void setAsesoria(DataAsesoria asesoria) {
		this.asesoria = asesoria;
	}



}
